package cl.hhha.web.webapp.action;

import java.util.LinkedHashSet;
import java.util.List;

import cl.hhha.web.model.Encuesta;
import cl.hhha.web.model.Opcion;
import cl.hhha.web.service.GenericManager;

import com.opensymphony.xwork2.Preparable;

public class EncuestaAction extends BaseAction implements Preparable {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1848176789194220341L;
	private GenericManager<Encuesta, Long> encuestaManager;
	private GenericManager<Opcion, Long> opcionManager;
    private List<Encuesta> encuestas;
    private Encuesta encuesta;
    private Long  id;
    
	public void setEncuestaManager(GenericManager<Encuesta, Long> encuestaManager) {
        this.encuestaManager = encuestaManager;
    }

    /**
	 * @param opcionManager the opcionManager to set
	 */
	public void setOpcionManager(GenericManager<Opcion, Long> opcionManager) {
		this.opcionManager = opcionManager;
	}

	public List<Encuesta> getEncuestas() {
        return encuestas;
    }

    /**
     * Grab the entity from the database before populating with request parameters
     */
    public void prepare() {
        if (getRequest().getMethod().equalsIgnoreCase("post")) {
            // prevent failures on new
            String encuestaId = getRequest().getParameter("encuesta.id");
            if (encuestaId != null && !encuestaId.equals("")) {
                encuesta = encuestaManager.get(new Long(encuestaId));
            }
        }
    }

    public String list() {
        encuestas = encuestaManager.getAll();
        return SUCCESS;
    }

    public void setId(Long  id) {
        this. id =  id;
    }

    public Encuesta getEncuesta() {
        return encuesta;
    }

    public void setEncuesta(Encuesta encuesta) {
        this.encuesta = encuesta;
    }

    public String delete() {
    	
    	//Eliminamos las opciones de la encuesta
    	encuesta = encuestaManager.get(encuesta.getId());
    	for (Opcion o : encuesta.getOpciones()) {
			opcionManager.remove(o.getId());
		}
    	
    	//Eliminamos la encuesta
        encuestaManager.remove(encuesta.getId());
        saveMessage(getText("encuesta.deleted"));

        return SUCCESS;
    }

    public String edit() {
        if (id != null) {
            encuesta = encuestaManager.get(id);
        } else {
            encuesta = new Encuesta();
        }

        return SUCCESS;
    }

    
    public String save() throws Exception {
        if (cancel != null) {
            return "cancel";
        }

        if (delete != null) {
            return delete();
        }
        
        boolean isNew = (encuesta.getId() == null);

        encuestaManager.save(encuesta);

        String key = (isNew) ? "encuesta.added" : "encuesta.updated";
        saveMessage(getText(key));

        return INPUT;
    }

	
}